package generator

import (
	"code/config"
	"code/utils"
	"fmt"
	"strings"

	"github.com/fatih/color"
)

//根据tag 检测重复 有重复则列出 用红色字体标准输出
// 检查参数是否为空并格式化 name
func ValidateName(name *string) error {
	if *name == "" {
		return fmt.Errorf("参数名称不能为空")
	}
	if !utils.IsPascalCase(*name) {
		converted := utils.ToPascalCase(*name)
		*name = converted
		fmt.Printf("参数名称已转换为大驼峰格式: %s\n", *name)
	}

	return nil
}

// 检查重复代码
func CheckDuplicateCode(filePaths []string, config *config.Config) error {
	var duplicateFiles []string
	//var notFoundFiles []string
	//startTag := "TAG_START:" + config.Name + "_" + config.Tag + "_" + config.Type
	startTag := config.StartTag
	endTag := config.EndTag
	//endTag := "TAG_END:" + config.Name + "_" + config.Tag + "_" + config.Type
	//red := color.New(color.FgRed).Add(color.Bold)
	green := color.New(color.FgGreen)
	//red.Println("这是红色加粗文本")
	//green.Println("这是绿色文本")
	//green.Println("" + startTag + "\n")
	//green.Println("" + endTag)
	//fmt.Printf("\031[31m[...]开始检测重复代码: %s\031[0m\n", filePaths)
	for _, filePath := range filePaths {
		content, err := ReadFile(filePath)
		if err != nil {
			return err
		}
		//fmt.Printf("动作" + config.Action + "\r\n")

		if strings.Contains(content, startTag) && strings.Contains(content, endTag) {
			if config.Action == "Add" {
				//red.Println("添加 有重复代码" + filePath + "\r\n")
				duplicateFiles = append(duplicateFiles, "\n"+filePath)
			}
			if config.Action == "Delete" {
				green.Printf("此文件含有tag: %s 可以清除code %s\n", config.Tag, filePath)
			}
		} else {
			//if config.Action == "Delete" {
			//fmt.Printf("删除 有重复代码" + filePath + "\r\n")
			//	notFoundFiles = append(notFoundFiles, "\n"+filePath)
			//}
		}
	}

	if len(duplicateFiles) > 0 && config.Action == "Add" {
		//fmt.Printf("\031[31m[...]检测重复代码: %s\031[0m\n", duplicateFiles)
		return fmt.Errorf("添加操作失败: 在以下文件中存在重复的标签 %s: %v", config.Tag, duplicateFiles)
	}
	//if len(notFoundFiles) > 0 && config.Action == "Delete" {
	//green.Println("可以删除的文件有")
	//fmt.Printf("\031[31m[...]检测重复代码: %s\031[0m\n", notFoundFiles)
	//green.Println("删除操作失败: 在以下文件中未找到标签 %s: %v"+"\n", config.Tag, notFoundFiles)
	//}

	//fmt.Printf("\031[31m[...]添加 检测重复代码: %s\031[0m\n", duplicateFiles)
	//fmt.Printf("\031[31m[...]删除 检测重复代码: %s\031[0m\n", notFoundFiles)

	//fmt.Printf("\031[31m[...]检测重复代码结束: \031[0m\n")
	return nil
}
